package controller

import (
	"ksd-social-api/commons/base/controller"
	"ksd-social-api/utils"
	"path"
)

type UploadController struct {
	controller.BaseController
}

/**
 * @desc 本地文件上传
 * @author feige
 * @date 2023-11-07
 * @version 1.0
 */
func (web *UploadController) UploadFile() {
	// 获取客户端传递过来的文件对象
	// 注意：这里的file名字必须和前端<input type="file" name="file">的name的属性值保持一致，或者使用js的formData.put("file",file)
	f, h, err := web.GetFile("file")
	// 如果文件是null或者没找到直接抛出异常
	if err != nil {
		web.FailCodeMsg(601, "文件上传失败！")
	}
	defer f.Close()

	// 保存位置在 resources/upload, 没有文件夹要先创建 h.Filename = ic_member_center_df_icon.png
	filenameall := path.Base(h.Filename)                            // ic_member_center_df_icon.png
	filesuffix := path.Ext(h.Filename)                              // .png
	fileprefix := filenameall[0 : len(filenameall)-len(filesuffix)] // ic_member_center_df_icon

	// 使用uuid产生一个唯一的文件名写入到文件服务器，1 ====a.jpg ----2. a.jpg
	newFileName := utils.GetUUID() + filesuffix
	// filePath 写入静态资源中-------------------------------？外部的文件目录做静态资源存储目录 （推荐）
	filePath := "/resources/upload/"
	// filePath :写入静态资源中-------------------------------当前项目下目录作为静态资源存储的目录
	//filePath := "resources/upload/"
	// 创建目录，如果目录不存在就递归自动创建
	utils.ExistDir(filePath)
	// 组合成新的服务器的完整的文件名
	overFilename := filePath + newFileName
	// 把本地文件上传到服务器指定filePath路径下
	web.SaveToFile("file", overFilename)

	m := map[string]any{}
	m["url"] = "http://localhost:8080/static/upload/" + newFileName
	m["path"] = overFilename
	m["size"] = h.Size
	m["ext"] = filesuffix
	m["fname"] = filenameall
	m["filename"] = fileprefix
	m["newname"] = newFileName
	// 返回
	web.Ok(m)
}

//func (c *UploadController) UploadFiles() {
//	files, err := c.GetFiles("files")
//	if err != nil {
//		return
//	}
//
//	for i, _ := range files {
//		//for each fileheader, get a handle to the actual file
//		file, err := files[i].Open()
//		defer file.Close()
//		if err != nil {
//			return
//		}
//
//		dst, err := os.Create("resources/upload/" + files[i].Filename)
//		defer dst.Close()
//		if err != nil {
//			return
//		}
//		if _, err := io.Copy(dst, file); err != nil {
//			return
//		}
//	}
//}
